#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Project    : AutomatedTesting
# @Name       : database.py
# @IDE        : PyCharm
# @Author     : OneYoung
# @Created    : 2025/8/24 20:15
# @Desc       : 数据库基本操作

import pymysql
from application.settings import DB_CONFIG

from utils.log_record import logger


class DataBase:
    """ 数据库基本操作 """

    def __init__(self, db_connect):
        self.db_connect = db_connect

    def execute(self, opt: str, sql: str):
        """
        执行SQL语句

        :param opt: SQL方法：select/insert/update/delete
        :param sql: 需要执行的SQL语句
        :return:
        """
        # 获取游标
        cursor = self.db_connect.cursor()
        try:
            cursor.execute(sql)  # 执行sql
            if opt != 'select':
                self.db_connect.commit()  # 提交到数据库执行
            else:
                return cursor.fetchall()
        except Exception as rc:
            logger.error(f"SQL执行失败.{rc}")
        finally:
            # 执行完成，关闭游标
            cursor.close()

    def select(self, sql: str) -> list:
        """
        查询所有匹配的结果

        :param sql: 原生SQL语句
        :return: 全部匹配的数组结果
        """

        return self.execute(opt="select", sql=sql)

    def insert(self, sql: str):
        """
        插入数据

        :param sql: 原生SQL语句
        :return:
        """
        return self.execute(opt="insert", sql=sql)

    def update(self, sql: str):
        """
        更新数据

        :param sql: 原生SQL语句
        :return:
        """
        return self.execute(opt="update", sql=sql)

    def delete(self, sql: str):
        """
        删除数据

        :param sql: 原生SQL语句
        :return:
        """
        return self.execute(opt="delete", sql=sql)


# 数据库操作
class DBOperate(DataBase):
    def __init__(self):
        super().__init__(pymysql.connect(**DB_CONFIG))
